/**
 * 时间戳格式化
 * @param String timestamp 需要转换的时间戳
 * @param String format 需要转换成的格式 'YYYY-MM-DD HH:mm:ss'或'YYYY-MM-DD'或'YYYY年MM月DD'
 * 
*/


function formatDate(timestamp, format = 'YYYY-MM-DD HH:mm:ss') {
	// 如果为null,则格式化当前时间
	if (!timestamp) timestamp = Number(new Date());
	// 如果dateTime长度为10或者13，则为秒和毫秒的时间戳，如果超过13位，则为其他的时间格式
	if (timestamp.toString().length == 10) timestamp *= 1000;
	
    const date = new Date(timestamp);
	
    const formatObj = {
        YYYY: date.getFullYear(),
        MM: String(date.getMonth() + 1).padStart(2, '0'),
        DD: String(date.getDate()).padStart(2, '0'),
        HH: String(date.getHours()).padStart(2, '0'),
        mm: String(date.getMinutes()).padStart(2, '0'),
        ss: String(date.getSeconds()).padStart(2, '0')
    };
    
    return format.replace(/(YYYY|MM|DD|HH|mm|ss)/g, match => formatObj[match]);
}

/**
 * 时间戳转为多久之前
 * @param String timestamp 需要转换的时间戳
 * 
*/

function formatTimeAgo(timestamp) {
	// 如果为null,则格式化当前时间
	if (!timestamp) timestamp = Number(new Date());
	// 如果dateTime长度为10或者13，则为秒和毫秒的时间戳，如果超过13位，则为其他的时间格式
	if (timestamp.toString().length == 10) timestamp *= 1000;
	
    const now = new Date().getTime();
    const past = new Date(timestamp).getTime();
    const diff = Math.floor((now - past) / 1000);

    const timeUnits = [
        { unit: '年', divisor: 31536000 },
        { unit: '个月', divisor: 2592000 },
        { unit: '天', divisor: 86400 },
        { unit: '小时', divisor: 3600 },
        { unit: '分钟', divisor: 60 },
        { unit: '秒', divisor: 1 }
    ];

    // 如果超过一年，显示具体日期
    if (diff >= 31536000) {
        const date = new Date(past);
        return date.toLocaleDateString('zh-CN', {
            year: 'numeric',
            month: '2-digit',
            day: '2-digit'
        });
    }

    // 如果小于1分钟，显示"刚刚"
    if (diff < 60) {
        return '刚刚';
    }

    // 其他情况显示"xx前"
    for (const { unit, divisor } of timeUnits) {
        const value = Math.floor(diff / divisor);
        if (value >= 1) {
            return `${value}${unit}前`;
        }
    }
}

export default {
	formatDate,
	formatTimeAgo
}

